package com.dao;

import com.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class UserDao {

    @Autowired
    JdbcTemplate jdbcTemplate;

    //新增、修改、查询、删除、批量插入

    /**
     * 新增一条记录
     * @param user
     * @return 返回受影响的行数-->新增条数
     */
    public int save(User user){
        String sql = "insert into t_user(userName,password) values(?,?)";
        return jdbcTemplate.update(sql,user.getUserName(),user.getPassword());
    }

    /**
     * 根据ID更新
     * @param user
     * @return 返回受影响的行数--->更新的行数
     */
    public int updateById(User user){
        String sql = "update t_user set addTime=?,userName=?,password=? where id=?";

        return jdbcTemplate.update(sql,user.getAddTime(),user.getUserName(),user.getPassword(),user.getId());
    }

    /**
     * 根据ID查询用户
     * @param id
     * @return 返回查询到的用户
     */
    public User getById(Long id){
        String sql = "select id,addTime,userName,password from t_user where id=?";
        //new BeanPropertyRowMapper<>(User.class):指定返回类型
        //底层代码 判断如果查询输入>1或者==0 是会报错
        try{
            return jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<>(User.class),id);
        }catch (Exception e){
            return null;//如果捕获到异常 返回null
        }

    }

    /**
     * 查询集合
     * @return 返回User集合
     */
    public List<User> getAll(){
        String sql = "select id,addTime,userName,password from t_user limit ?,?";
        return jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(User.class),10,20);
    }

    /**
     * 根据ID删除
     * @param id
     * @return 受影响的行数-->删除的行数
     */
    public int deleteById(Long id){
        String sql = "delete from t_user where id = ?";
        return jdbcTemplate.update(sql,id);
    }

    /**
     * 批量插入
     * @param users
     * @return 返回的数组 是每条数据是否插入成功: 0 未成功 1 成功
     */
    public int[] batchInsert(List<Object[]> users){
        String sql = "insert into t_user(userName,password) values(?,?)";
        return jdbcTemplate.batchUpdate(sql,users);
    }

    /**
     * 统计
     * @return 返回统计数量
     */
    public int count(){
        String sql = "select count(1) from t_user";

        return jdbcTemplate.queryForObject(sql,Integer.class);

    }

}
